package co.edu.uniquindio.ondas.daos;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import co.edu.uniquindio.ondas.entidades.Estudiante;
/**
 * @version 1.0
 * @author Javier
 * 
 * Session Bean implementation class EstudianteDAO
 * 
 * @param Convocatoria hace referencia a la entidad que va hacer manejada por el DAO.
 * @param String especifica cual es el tipo de dato de la llave primaria de la entidad. 
 */
public class EstudianteDAO extends DAO<Estudiante, String>{

	/**
	 * Manejador de Persistencia
	 */
	private EntityManager entityManager;
	/**
	 * Metodo constructor 
	 *@param entityManager
	 */
	public EstudianteDAO(EntityManager entityManager) {
		super(entityManager);
		this.entityManager=entityManager;
	}

	@Override
	protected Class<Estudiante> getEntityClass() {
		// TODO Auto-generated method stub
		return Estudiante.class;
	}
	
	/**
	 * Metodo que permite consultar y obtener el Listado de los Estudiantes por Grupo
	 * @param loginGrupo
	 * @return Lista de Estudiantes por Grupo
	 */
	@SuppressWarnings("unchecked")
	public List<Estudiante> obtenerEstudiantesGrupo(String loginGrupo)
	{
		Query query=entityManager.createQuery("SELECT e FROM Estudiante e WHERE e.grupo.login=:parametro");
		query.setParameter("parametro", loginGrupo);
		return query.getResultList();
	}
	
	/**
	 * Metodo que permite consultar y obtener el numero de estudiantes por Grupo
	 * @param idGrupo
	 * @return Numero de Estudiantes por Grupo
	 */
	public long obtenerNumeroEstudiantesGrupo(long idGrupo)
	{
		Query query=entityManager.createQuery("SELECT COUNT(e) FROM Estudiante e WHERE e.grupo.identificacion=:parametro");
		query.setParameter("parametro", idGrupo);
		return (Long) query.getSingleResult();
	}
	
	/**
	 * Metodo que permite obtener el Numero de Estudiantes por Sede
	 * @param idSede
	 * @return numero de Estudiantes por Sede
	 */
	public long obtenerNumeroEstudiantesSede(long idSede)
	{
		Query query=entityManager.createQuery("SELECT COUNT(e) FROM Estudiante e WHERE e.grupo.sede.identificacion=:parametro");
		query.setParameter("parametro", idSede);
		return (Long) query.getSingleResult();
	}
	
	

}
